package JUC.single;

public class Lazy {
    private Lazy(){
        System.out.println(Thread.currentThread().getName()+"ok");
    }
    private volatile static Lazy lazy;

    public static Lazy getInstance( ){
        //双重检索
        if (lazy==null) {
            synchronized (Lazy.class) {
                if (lazy == null) {
                    lazy = new Lazy();//不是原子性操作，分配内存空间

                    /**
                     * 1.分配内存空间
                     * 2.执行构造方法，初始化对象
                     * 3.把对象指向这个空间
                     */
                }
            }
        }
        return lazy;//lazy还没有完成构造
    }

    //单线程单例ok多线程并发
    public static void main(String[] args) {
        for (int i = 0; i <10 ; i++) {
            new Thread(()->{
                lazy.getInstance();
            }).start();
        }
    }
}
